// @/utils/websocket.js
import { useWebSocketStore } from '@/store/websocketStore'
import { ElMessageBox } from 'element-plus' // 替换jQuery模态框

// 初始化连接函数（接收参数，通过store管理实例）
export function initWebSocket(wsUrl, userId, token) {
  const websocketStore = useWebSocketStore()
  const { ws: socket } = websocketStore

  // 避免重复创建连接
  if (socket && socket.readyState === WebSocket.OPEN) {
    return
  }

  // 参数验证
  if (!wsUrl || !userId || !token) {
    console.error('WebSocket初始化失败：缺少必要参数（wsUrl、userId、token）')
    return
  }

  try {
    // 修正Token传递方式：通过URL查询参数（WebSocket不支持自定义请求头）
    const wsFullUrl = `ws://${wsUrl}/websocket/message/${userId}`
    const newSocket = new WebSocket(wsFullUrl, [token])

    // 更新store中的实例
    websocketStore.ws = newSocket
    websocketStore.isConnected = false

    newSocket.onopen = function () {
      console.log('WebSocket 连接成功')
      websocketStore.isConnected = true // 更新连接状态
    }

    newSocket.onmessage = function (event) {
      try {
        const noticeJson = JSON.parse(event.data)
        console.log('收到服务器消息:', noticeJson)
        
        // 替换jQuery模态框为Element Plus
        ElMessageBox.confirm(noticeJson.message, '提示', {
          confirmButtonText: '确认',
          cancelButtonText: '取消',
          type: 'info'
        }).then(() => {
          if (noticeJson.type === 'noticeType') {
            // 建议：通过事件通知而非直接刷新（更灵活）
            window.location.reload()
          }
        }).catch(() => {
          // 取消操作处理
        })
      } catch (parseError) {
        console.error('消息解析失败:', parseError)
      }
    }

    newSocket.onclose = function (event) {
      console.log('WebSocket 连接关闭', event.code, event.reason)
      websocketStore.isConnected = false // 更新连接状态

      // 仅在异常关闭时重连（1000是正常关闭状态码）
      if (event.code !== 1000) {
        // 重连时携带原始参数
        setTimeout(() => initWebSocket(wsUrl, userId, token), 3000) // 延长重连间隔，避免频繁请求
      }
    }

    newSocket.onerror = function (error) {
      console.error('WebSocket 错误:', error)
      websocketStore.isConnected = false
    }

  } catch (e) {
    console.error('WebSocket 初始化失败:', e)
    websocketStore.isConnected = false
    // 失败重连（携带参数）
    setTimeout(() => initWebSocket(wsUrl, userId, token), 3000)
  }
}

// 移除全局load事件（无需初始加载，登录后由store触发）